package com.xusl.spring.proxy;

import java.lang.reflect.Proxy;

/**
 * 生产代理对象工厂
 *
 * @Author: xusl
 * @Date: 2021/8/4 9:51 下午
 */
public class JDKProxyFactory {

    /**
     * @param obj 被代理对象(接口实例)
     * @return
     */
    public static Object getProxy(Object obj) {
        // 返回代理对象
        Object proxyInstance = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), (proxy, method, args) -> {
            System.out.println("obj接口执行前置增强");

            Object result = method.invoke(obj, args);

            System.out.println("obj接口执行后置增强");

            // 被代理对象执行结果返回
            return result;
        });

        // 返回代理对象实例
        return proxyInstance;
    }
}
